Импорт библиотек

library(data.table) 
library(word2vec) 
library(readr)
library(tm) 
library(stringr) 

Импорт библиотек для визуализации векторных представлений

library(ggplot2) 
library(ggrepel) 
library(plotly) 
library(umap) 

Word2Vec с архитектурой CBOW

Загрузка данных

file_name <-"./processed_text.txt"

text <- read_lines(file_name) 

Обучение модели

model = word2vec(x = file_name, type = "cbow", dim = 15, iter = 20)

Вывод “близких слов” по векторному представлению для слова “это”

cbow_lookslike <- predict(model, c("это"), type = "nearest", top_n = 10) 
print(cbow_lookslike)
## $это
##    term1      term2 similarity rank
## 1    это       этим  0.9415629    1
## 2    это      самое  0.9351895    2
## 3    это приложения  0.9344024    3
## 4    это  добавлять  0.9298916    4
## 5    это    сделано  0.9296594    5
## 6    это     делать  0.9275446    6
## 7    это      вроде  0.9221837    7
## 8    это    develop  0.9202037    8
## 9    это  изменения  0.9155055    9
## 10   это      блоки  0.9149044   10

Визуализация векторных представлений полученных с помощью Word2Vec с архитектурой CBOW

corpus <- Corpus(VectorSource(text))

dtm <- DocumentTermMatrix(corpus) 

words <- colnames(as.matrix(dtm)) 

word_list <- strsplit(words, " ") 
word_list <- unlist(word_list) 

word_list <- word_list[word_list != ""] 

embedding <- as.matrix(model) 
embedding <- predict(model, word_list, type = "embedding") 
embedding <- na.omit(embedding)


vizualization <- umap(embedding, n_neighbors = 15, n_threads = 2) 

df  <- data.frame(word = rownames(embedding),  
                  xpos = gsub(".+//", "", rownames(embedding)),  
                  x = vizualization$layout[, 1], y = vizualization$layout[, 2],  
                  stringsAsFactors = FALSE) 

plot_ly(df, x = ~x, y = ~y, type = "scatter", mode = 'text', text = ~word) %>% 
  layout(title = "CBOW Embeddings Visualization")

Word2Vec с архитектурой Skip-Gram

Загрузка данных

file_name <-"./processed_text.txt"

text <- read_lines(file_name) 

Обучение модели

model = word2vec(x = file_name, type = "skip-gram", dim = 15, iter = 20)

Вывод “близких слов” по векторному представлению для слова “это”

cbow_lookslike <- predict(model, c("это"), type = "nearest", top_n = 10) 
print(cbow_lookslike)
## $это
##    term1     term2 similarity rank
## 1    это    просто  0.9803271    1
## 2    это    можете  0.9760230    2
## 3    это    работу  0.9713555    3
## 4    это    именно  0.9681293    4
## 5    это    однако  0.9617818    5
## 6    это      свой  0.9615960    6
## 7    это позволяет  0.9589402    7
## 8    это     нужно  0.9580863    8
## 9    это     иначе  0.9568923    9
## 10   это  придется  0.9567359   10

Визуализация векторных представлений полученных с помощью Word2Vec с архитектурой Skip-Gram

corpus <- Corpus(VectorSource(text))

dtm <- DocumentTermMatrix(corpus) 

words <- colnames(as.matrix(dtm)) 

word_list <- strsplit(words, " ") 
word_list <- unlist(word_list) 

word_list <- word_list[word_list != ""] 

embedding <- as.matrix(model) 
embedding <- predict(model, word_list, type = "embedding") 
embedding <- na.omit(embedding)


vizualization <- umap(embedding, n_neighbors = 15, n_threads = 2) 

df  <- data.frame(word = rownames(embedding),  
                  xpos = gsub(".+//", "", rownames(embedding)),  
                  x = vizualization$layout[, 1], y = vizualization$layout[, 2],  
                  stringsAsFactors = FALSE) 

plot_ly(df, x = ~x, y = ~y, type = "scatter", mode = 'text', text = ~word) %>% 
  layout(title = "Skip-Gram Embeddings Visualization")